Instead of knowing explicitly about the pygrub entry option, allow
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Wed, 3 May 2006 10:02:30 +0000 (11:02 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Wed, 3 May 2006 10:02:30 +0000 (11:02 +0100)
passing arbitrary options to the bootloader and deprecate the bootentry
option.

Signed-off-by: Jeremy Katz <katzj@redhat.com>
tools/python/xen/xend/XendBootloader.py
tools/python/xen/xend/XendDomainInfo.py
tools/python/xen/xm/create.py

index 7f348ddad1ee9ef0714144034214f04ad2ea3918..143bf369049f823811dd462d6646cdd5c6c1295c 100644 (file)
@@ -19,13 +19,13 @@ import sxp
 from XendLogging import log
 from XendError import VmError
 
-def bootloader(blexec, disk, quiet = 0, entry = None):
+def bootloader(blexec, disk, quiet = 0, blargs = None):
     """Run the boot loader executable on the given disk and return a
     config image.
     @param blexec  Binary to use as the boot loader
     @param disk Disk to run the boot loader on.
     @param quiet Run in non-interactive mode, just booting the default.
-    @param entry Default entry to boot."""
+    @param blargs Arguments to pass to the bootloader."""
     
     if not os.access(blexec, os.X_OK):
         msg = "Bootloader isn't executable"
@@ -48,8 +48,8 @@ def bootloader(blexec, disk, quiet = 0, entry = None):
         if quiet:
             args.append("-q")
         args.append("--output=%s" %(fifo,))
-        if entry is not None:
-            args.append("--entry=%s" %(entry,))
+        if blargs is not None:
+            args.extend(blargs.split())
         args.append(disk)
 
         try:
index a4c1d4a9e485163e520dd8e1becea1ec661c66e0..d88799bc7c06568b8d6200a16018483326ce61f6 100644 (file)
@@ -132,6 +132,7 @@ ROUNDTRIPPING_CONFIG_ENTRIES = [
     ('memory',     int),
     ('maxmem',     int),
     ('bootloader', str),
+    ('bootloader_args', str),
     ('features', str),
     ]
 
@@ -571,6 +572,7 @@ class XendDomainInfo:
             defaultInfo('memory',       lambda: 0)
             defaultInfo('maxmem',       lambda: 0)
             defaultInfo('bootloader',   lambda: None)
+            defaultInfo('bootloader_args', lambda: None)            
             defaultInfo('backend',      lambda: [])
             defaultInfo('device',       lambda: [])
             defaultInfo('image',        lambda: None)
@@ -1630,7 +1632,8 @@ class XendDomainInfo:
             if disk is None:
                 continue
             fn = blkdev_uname_to_file(disk)
-            blcfg = bootloader(self.info['bootloader'], fn, 1)
+            blcfg = bootloader(self.info['bootloader'], fn, 1,
+                               self.info['bootloader_args'])
             break
         if blcfg is None:
             msg = "Had a bootloader specified, but can't find disk"
index 1c52f20a6a19e3294e49ead88cad3c614f5f0574..dd7d1675a9dcfd568fb7406fa90f645f378876b9 100644 (file)
@@ -122,9 +122,13 @@ gopts.var('bootloader', val='FILE',
           fn=set_value, default=None,
           use="Path to bootloader.")
 
+gopts.var('bootargs', val='NAME',
+          fn=set_value, default=None,
+          use="Arguments to pass to boot loader")
+
 gopts.var('bootentry', val='NAME',
           fn=set_value, default=None,
-          use="Entry to boot via boot loader")
+          use="DEPRECATED.  Entry to boot via boot loader.  Use bootargs.")
 
 gopts.var('kernel', val='FILE',
           fn=set_value, default=None,
@@ -620,8 +624,13 @@ def run_bootloader(vals):
     (uname, dev, mode, backend) = vals.disk[0]
     file = blkif.blkdev_uname_to_file(uname)
 
+    if vals.bootentry:
+        warn("The bootentry option is deprecated.  Use bootargs and pass "
+             "--entry= directly.")
+        vals.bootargs = "--entry=%s" %(vals.bootentry,)
+
     return bootloader(vals.bootloader, file, not vals.console_autoconnect,
-                      vals.bootentry)
+                      vals.bootargs)
 
 def make_config(vals):
     """Create the domain configuration.
@@ -654,8 +663,10 @@ def make_config(vals):
         config.append(['backend', ['tpmif']])
 
     if vals.bootloader:
-        config.append(['bootloader', vals.bootloader])
         config_image = run_bootloader(vals)
+        config.append(['bootloader', vals.bootloader])
+        if vals.bootargs:
+            config.append(['bootloader_args'], vals.bootargs)
     else:
         config_image = configure_image(vals)
     config.append(['image', config_image])